package com.appium.manager.element;

import com.appium.manager.data.TestDataHandler;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.WebElement;

import java.io.File;
import java.util.List;

import org.openqa.selenium.OutputType;

/**
 * <p>
 * 元素定位工具
 * </p>
 *
 * @author 大忽悠
 * @create 2022/7/7 11:22
 */
public class ElementHelper extends AbstractElement {


    public ElementHelper(AndroidDriver<WebElement> androidDriver) {
        this.androidDriver = androidDriver;
        testDataHandler = new TestDataHandler();
    }

    public ElementHelper(AndroidDriver<WebElement> androidDriver, String testDataFilePath) {
        this.androidDriver = androidDriver;
        testDataHandler = new TestDataHandler(testDataFilePath);
    }

    public WebElement findById(String id) {
        return androidDriver.findElementById(id);
    }

    /**
     * 如果存在多个,默认返回第一个
     */
    public WebElement findByName(String name) {
        return androidDriver.findElementByName(name);
    }

    /**
     * 返回所有
     */
    public List<WebElement> findElementsByName(String name) {
        return androidDriver.findElementsByName(name);
    }

    /**
     * 如果存在多个,默认返回第一个
     */
    public WebElement findByClassName(String className) {
        return androidDriver.findElementByClassName(className);
    }

    /**
     * 返回所有
     */
    public List<WebElement> findElementsByClassName(String className) {
        return androidDriver.findElementsByClassName(className);
    }

    /**
     * 通过标签名定位,如果存在多个,返回第一个
     */
    public WebElement findByTagName(String tagName) {
        return androidDriver.findElementByTagName(tagName);
    }

    /**
     * 返回所有
     */
    public List<WebElement> findElementsByTagName(String tagName) {
        return androidDriver.findElementsByTagName(tagName);
    }

    /**
     * 如果存在多个,返回第一个
     */
    public WebElement findByXpath(String xpath) {
        return androidDriver.findElementByXPath(xpath);
    }

    public List<WebElement> findElementsByXpath(String xpath) {
        return androidDriver.findElementsByXPath(xpath);
    }

    /**
     * 根据css选择器定位
     */
    public WebElement findByCssSelector(String css) {
        return androidDriver.findElementByCssSelector(css);
    }

    public List<WebElement> findElementsByCssSelector(String css) {
        return androidDriver.findElementsByCssSelector(css);
    }

    /**
     * 截图
     */
    public File snapshot() {
        return androidDriver.getScreenshotAs(OutputType.FILE);
    }
}
